# Pardos Toolbox

Plugin WordPress de type "toolbox" pour agence web.
Version : 1.7.0 — Requiert WordPress 5.0+ / PHP 7.3 → 8.4

Regroupe plusieurs outils d'administration dans un menu unique **Pardos Toolbox** :

- **Maillage Interne** — vérificateur de liens internes et externes
- **Médias** — renommage SEO des images et diagnostic des images cassées
- **Analyse SEO** — génération de titres et meta descriptions via OpenAI (pour Rank Math)
- **Recherche BDD** — recherche d'une chaîne dans toute la base de données
- **Rank Math** — clé IndexNow + lien permanent toujours à jour

## Installation

1. Copier le dossier `pardos-toolbox` dans `/wp-content/plugins/`
2. Activer le plugin dans le menu "Extensions" de WordPress
3. Aller dans "Pardos Toolbox" dans le menu admin

Toutes les actions nécessitent la capacité `manage_options` (administrateur).

## Outil : Vérificateur de Maillage Interne

### Fonctionnalités

- **Scan de tous les post types** : Articles, pages, et tout autre post type public
- **Détection des liens internes ET externes**
- **Vérification des statuts HTTP** : 200 (OK), 301 (Redirection), 404 (Erreur)
- **Mise à jour en masse** : Corrige automatiquement les liens 301
- **Correction manuelle** : Pour les liens 404, recherche dans les posts existants

### Utilisation

1. **Scanner les articles** : Cliquez sur le bouton pour extraire tous les liens de vos contenus (par lots)
2. **Vérifier les liens** : Lance la vérification HTTP de chaque lien (par lots de 5)
3. **Consulter les résultats** : Utilisez les filtres pour voir les 301, 404, etc.
4. **Mettre à jour les 301** : Un clic pour remplacer toutes les anciennes URLs par les nouvelles
5. **Corriger les 404** : Cliquez sur "Corriger" pour choisir une nouvelle URL

### Stockage

Les résultats du scan sont conservés dans un transient WordPress (`pardos_scan_results`,
durée de vie 24 h). Aucune table personnalisée n'est créée en base.

## Outil : Médias

### Renommage SEO des images

- Renomme le fichier physique et toutes ses vignettes
- Nettoie le nom (minuscules, sans accent, underscores)
- Gère automatiquement les doublons de nom (suffixe `-1`, `-2`, …)
- Met à jour le titre, la légende, la description et le texte alternatif
- Remplace les anciennes URLs partout en base (post_content, postmeta, Bricks,
  options, usermeta, termmeta, commentmeta) — gère les données PHP sérialisées et JSON
- Intégration CompressX : nettoie puis recompresse les images renommées

### File d'attente des renommages

L'interface ne bloque jamais : on peut enchaîner les clics sur « Renommer » de plusieurs
images sans attendre la fin de la précédente. Chaque ligne affiche son propre statut
(En attente → Renommage → ✓ Renommé).

Les renommages sont volontairement exécutés **un par un** : la mise à jour des références
lit puis réécrit les métas (Bricks, options…). Deux renommages simultanés portant sur une
même page pourraient s'écraser mutuellement et perdre un remplacement.

### Rechercher / Remplacer en masse dans les noms de fichiers

- Remplace une chaîne dans le nom de fichier des images (l'extension n'est jamais touchée)
- **Prévisualisation obligatoire** : indique combien d'images seront touchées et affiche
  pour chacune le nom actuel → le nom final exact, avant toute modification
- Signale les images qui correspondent mais dont le nom ne changerait pas (ignorées)
- Signale les collisions de nom (un suffixe sera ajouté automatiquement)
- Option de casse sensible/insensible
- Application par lot avec progression, via la même file d'attente
- Le nom proposé passe par la même normalisation SEO que le renommage unitaire :
  l'aperçu correspond donc au résultat réel (ex. les tirets deviennent des underscores)
- Limite de 500 renommages par passage (relancer l'opération pour traiter le reste)

### Diagnostic des images cassées

- Détecte les références d'images pointant vers un fichier inexistant
- Détecte les attachments (fichier principal + vignettes) manquants sur le disque
- Propose des candidats de remplacement et corrige les références en un clic
- Régénération des vignettes depuis le fichier source
- Outil de debug d'URL pour tracer où une URL est référencée en base

## Outil : Analyse SEO

- Génère un **titre SEO** (40–60 caractères) et une **meta description** (130–160 caractères)
  via l'API OpenAI, à partir du contenu réel de la page (récupéré en markdown, avec repli HTML)
- Applique les résultats aux métas **Rank Math** (`rank_math_title`, `rank_math_description`)
- Clé API et modèle OpenAI configurables (options `pardos_seo_openai_key`,
  `pardos_seo_openai_model` — modèle par défaut : `gpt-4o-mini`)
- La clé API peut être centralisée hors base via la constante `PARDOS_OPENAI_KEY`
  dans `wp-config.php` :
      define('PARDOS_OPENAI_KEY', 'sk-...');
  Si elle est définie, elle est prioritaire sur l'option et le champ de réglage
  est verrouillé (clé jamais exposée dans le HTML de l'admin).

## Outil : Rank Math (IndexNow)

- Affiche la clé IndexNow de Rank Math (option `rank-math-options-instant-indexing`,
  champ `indexnow_api_key`), lue directement en base — **aucune dépendance** au code
  de Rank Math : fonctionne même si Rank Math est absent, ancien ou désactivé.
- Affiche le lien officiel servi par Rank Math : `home_url()/{clé}.txt`
  (le fameux `indexnow-api-key-location`).
- Fournit un **lien permanent** `home_url()/absoluteurlindexnowkey` qui expose
  **toujours la dernière clé** :
  - c'est une **URL virtuelle** interceptée sur `template_redirect` — aucun fichier
    n'est créé sur le disque ;
  - la clé est relue à chaque visite (reflète les régénérations) ;
  - sortie en `text/plain`, `X-Robots-Tag: noindex` ;
  - slug personnalisable via le filtre `pardos_indexnow_slug` ;
  - si aucune clé n'existe, l'URL rend la main à WordPress (404 normal) — jamais d'erreur.

## Journalisation

Les messages de diagnostic internes ne sont écrits dans le log PHP que si
`WP_DEBUG` est actif (helper `pardos_log()`). En production, aucun bruit dans
les logs.

## Outil : Recherche BDD

- Recherche une chaîne (min. 2 caractères) dans les tables principales :
  post_content, post_title, post_excerpt, postmeta, options, usermeta, termmeta,
  commentmeta, comment_content
- Option de casse sensible/insensible
- Extrait un aperçu (20 caractères avant / après) avec surlignage de l'occurrence
- Lien d'édition direct vers le post/commentaire concerné
- Les **révisions** de posts sont exclues des résultats
- Les médias (attachments) sont exclus par défaut (option pour les inclure)
- Les transients sont exclus du scan des options

### Évolutions prévues

- Scan automatique du maillage (cron hebdomadaire)
- Notifications email pour les nouveaux 404
- Autres outils dans la toolbox
